CREATE PROCEDURE dbo.sp_RepConsultaGenericaExped

-- Parametros

@SeleccionFechas int ,	-- 1 = NO , 2 = SI
@FechaDesde varchar(30) ,
@FechaHasta varchar(30) ,
@Expediente varchar(20) ,
@Procurador int , 
@ZonaJuzgado int ,
@SubZonaJuzgado int ,
@ConsecutivoJuzgado int ,
@Area int , 
@Materia int , 
@Tipo int , 
@Asunto int , 
@Participacion_Estado int , 
@Promovente varchar(100) ,
@Parte varchar(200) ,
@Perjudicado varchar(100) ,
@InstitucionInvolucrada int , 
@EstadoProcesal int , 
@Inestimable int , 
@Pretension int ,
@Cuantia int ,
@Costas int , 
@TipoMoneda int , 
@Via_Administrativa int ,
@Comentarios varchar(200) ,
@SeleccionVigencia int ,	-- 0 = Cerrados , 1 = Activos , 2 = Todos
@Ordenamiento int ,		-- 1 = Expediente , 2 = Fechas , 3 = Partes , 4 = Procurador
@SeleccionTipoDocumento int	-- -1 = Todos , 1 = Litigio , 2 = Actividad No-Contenciosa , 3 = No Corresponde a PGR

AS

DECLARE
@FechaInicial datetime ,
@FechaFinal datetime  
SET @FechaInicial = CONVERT( DATETIME , LEFT( @FechaDesde , 10 ) + ' 00:00:00' , 121 ) 
SET @FechaFinal   = CONVERT( DATETIME , LEFT( @FechaHasta , 10 ) + ' 23:59:00' , 121 ) 

SELECT 	DISTINCT
	x.procurador , 
	v.Nombre_Procurador ,
	e.expediente , 
	x.materiatipoasunto , 
--	m.nombre AS Materia_Nombre , 
	Materia_Nombre = ( SELECT m.nombre FROM MateriaTipoAsunto AS m WHERE m.MateriaTipoAsunto = x.MateriaTipoAsunto ) ,
	x.estadoprocesal , 
--	t.nombre AS EstProc_Nombre , 
	EstProc_Nombre = ( SELECT t.nombre FROM EstadoProcesal AS t WHERE t.EstadoProcesal = x.EstadoProcesal ) , 
	x.cuantia ,
	x.inestimable ,
	Parte = CASE
		WHEN LEN( COALESCE( e.Promovente , '' ) ) = 0 AND LEN( COALESCE( e.Parte , '' ) ) = 0 THEN ''
		WHEN LEN( COALESCE( e.Promovente , '' ) ) = 0 AND LEN( COALESCE( e.Parte , '' ) ) > 0 THEN E.Parte
		WHEN LEN( COALESCE( e.Promovente , '' ) ) > 0 AND LEN( COALESCE( e.Parte , '' ) ) = 0 THEN E.Promovente
		ELSE e.Promovente + ' CONTRA ' + e.Parte
		END 
INTO	#Datos_Fuente 
FROM 	Expediente e 
	INNER JOIN Procuradores_X_Expediente x 
		ON e.expediente = x.expediente AND x.primario_chk = '1'
	INNER JOIN View_Nombre_Procuradores v
			ON x.procurador = v.procurador 
	LEFT OUTER JOIN Instituciones_X_Expediente k 
		ON e.expediente = k.expediente 
	LEFT OUTER JOIN InstitucionInvolucrada I 
		ON k.InstitucionInvolucrada = i.InstitucionInvolucrada 
	INNER JOIN Juzgados j 
		ON e.juzgado = j.juzgado 
	INNER JOIN Area a 		ON x.area = a.area 
/*	INNER JOIN MateriaTipoAsunto m 
		ON e.materiatipoasunto = m.materiatipoasunto 
	INNER JOIN EstadoProcesal t 
		ON e.estadoprocesal = t.estadoprocesal 
*/
WHERE	x.Activo_Cerrado = CASE @SeleccionVigencia		-- 0 = Cerrados 1 = Activos , 2 = Todos
				WHEN -1 THEN x.Activo_Cerrado
				ELSE @SeleccionVigencia
				END

	AND e.Tipo_Expediente =	CASE @SeleccionTipoDocumento
					WHEN  -1 THEN e.Tipo_Expediente
					ELSE @SeleccionTipoDocumento
					END

	AND e.fecha_ing_pgr BETWEEN CASE @SeleccionFechas
					WHEN 1 THEN e.fecha_ing_pgr
					ELSE @FechaInicial
					END
				AND CASE @SeleccionFechas
					WHEN 1 THEN e.fecha_ing_pgr
					ELSE @FechaFinal
					END

	-- el Expediente es buscado tanto en la columna Expediente como en la columna Equivale_A por acumulacion de expedientes
	AND (
		e.expediente LIKE CASE LEN( @Expediente ) -- blancos no son tomados como valor significativo
					WHEN 0 THEN e.expediente
					ELSE '%' + @Expediente + '%'
					END
		OR
		e.Equivale_A LIKE CASE LEN( @Expediente ) -- blancos no son tomados como valor significativo
					WHEN 0 THEN e.Equivale_A 
					ELSE '%' + @Expediente + '%'
					END
	     )

	AND x.Procurador = CASE @Procurador
				WHEN -1 THEN x.Procurador 
				ELSE @Procurador
				END

	AND e.juzgado - (e.juzgado % 10000) =	
				CASE @ZonaJuzgado
					WHEN -1 THEN e.juzgado - (e.juzgado % 10000) 
					ELSE @ZonaJuzgado * 10000
					END

	AND (e.juzgado % 10000)/100 = CASE @SubZonaJuzgado
					WHEN -1 THEN (e.juzgado % 10000)/100 
					ELSE @SubZonaJuzgado 
					END

	AND (e.juzgado % 10000) % 100 =	CASE @ConsecutivoJuzgado
						WHEN -1 THEN (e.juzgado % 10000) % 100 
						ELSE @ConsecutivoJuzgado
						END

	AND x.Participacion_Estado =	CASE @Participacion_Estado
						WHEN -1 THEN x.Participacion_Estado 
						ELSE @Participacion_Estado
						END

	AND e.Promovente LIKE CASE LEN( @Promovente ) -- blancos no son tomados como valor significativo
					WHEN 0 THEN e.Promovente 
					ELSE '%' + @Promovente + '%'
					END

	AND e.parte LIKE CASE LEN( @Parte ) -- blancos no son tomados como valor significativo
				WHEN 0 THEN e.parte
				ELSE '%' + @Parte + '%'
				END

	AND e.perjudicado LIKE CASE LEN( @Perjudicado ) -- blancos no son tomados como valor significativo
					WHEN 0 THEN e.perjudicado
					ELSE '%' + @Perjudicado + '%'
					END

	AND x.area = CASE @Area
			WHEN -1 THEN x.area 
			ELSE @Area
			END

	AND x.materiatipoasunto - (x.materiatipoasunto % 10000) = 
			CASE @Materia
				WHEN -1 THEN x.materiatipoasunto - (x.materiatipoasunto % 10000) 
				ELSE @Materia * 10000
				END

	AND (x.materiatipoasunto % 10000)/100 = 
			CASE @Tipo
				WHEN -1 THEN (x.materiatipoasunto % 10000)/100 
				ELSE @Tipo
				END

	AND (x.MateriaTipoAsunto % 10000) % 100 = 
			CASE @Asunto
				WHEN -1 THEN (x.MateriaTipoAsunto % 10000) % 100 
				ELSE @Asunto
				END

	AND k.institucioninvolucrada = CASE @InstitucionInvolucrada
						WHEN -1 THEN k.institucioninvolucrada 
						ELSE @InstitucionInvolucrada
						END

	AND x.estadoprocesal = CASE @EstadoProcesal
					WHEN -1 THEN x.estadoprocesal 
					ELSE @EstadoProcesal
					END

	AND x.Inestimable = CASE @Inestimable
				WHEN 1 THEN @Inestimable 
				ELSE x.Inestimable 
				END

	AND (	( x.Pretension IS NOT NULL AND x.Pretension >= @Pretension )
		OR 
		( x.Pretension IS  NULL AND @Pretension = 0 )
		)

	AND x.cuantia >= CASE @Cuantia
				WHEN 1 THEN @Cuantia 
				ELSE x.cuantia
				END

	AND (	( x.Costas IS NOT NULL AND x.Costas >= @Costas )
		OR 
		( x.Costas IS  NULL AND @Costas = 0 )
		)

	AND x.Tipo_Moneda = CASE @TipoMoneda
				WHEN -1 THEN x.Tipo_Moneda 
				ELSE @TipoMoneda
				END

	AND e.Agotamiento_ViaAdministrativa = CASE @Via_Administrativa
				WHEN -1 THEN e.Agotamiento_ViaAdministrativa 
				ELSE @Via_Administrativa
				END

	AND x.comentarios LIKE CASE LEN( @Comentarios ) -- blancos no son tomados como valor significativo
					WHEN 0 THEN x.comentarios
					ELSE '%' + @Comentarios + '%'
					END

IF @Ordenamiento = 1 -- Expediente
	SELECT	*
	FROM	#Datos_Fuente
	ORDER BY Expediente 

/* no aplica pues #Datos_Fuente no contiene Fecha_Ing_PGR
IF @Ordenamiento = 2 -- Fechas
	SELECT	*
	FROM	#Datos_Fuente
	ORDER BY Parte 
*/

IF @Ordenamiento = 3 -- Partes
	SELECT	*
	FROM	#Datos_Fuente
	ORDER BY Parte 

IF @Ordenamiento = 4 -- Procurador
	SELECT	*
	FROM	#Datos_Fuente
	ORDER BY Nombre_Procurador , 
		Materia_Nombre , 
		EstProc_Nombre 

DROP TABLE #Datos_Fuente
